package com.jt.controller;

import com.jt.pojo.User;
import com.sun.org.apache.bcel.internal.generic.NEW;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@Controller
//@ResponseBody //类中的方法返回的数据都是JSON
@RestController //@Controller + @ResponseBody
@RequestMapping("/user")
public class UserController {
    /**
     * 类型 : get请求
     * URL : http://localhost:8080/user/findUser?id=100&name=tomcat
     * 返回值 : String id : name
     * 补课 :
     *      1.Servlet-request对象/response对象
     *      2.Servlet中如何取值?
     */
    @RequestMapping("/findUser")
    //@ResponseBody //响应数据,返回JSON串
    public void findUser(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String id = request.getParameter("id");
        int intId = Integer.parseInt(id);
        String name = request.getParameter("name");
        response.getWriter().write(intId+ ":" + name);
        //return intId+ ":" + name;
    }

    /**
     * URL : http://localhost:8080/user/findUser2?id=100&name=tomcat
     * 规则 : SpringMVC中参数名称,必须与传递参数名称一致
     * 原理 : SpringMVC在内部将Servlet的取值的方式进行包装,用户只需要填写参数即可获取数据
     * @return
     */
    @RequestMapping("/findUser2")
    //@ResponseBody //响应数据,返回JSON串
    public String findUser2(Integer id, String name) {
        return id+ ":" + name;
    }

    /**
     * URL : http://localhost:8080/user/getUser?id=1&name=娇妹&age=18
     * 返回值 : User对象
     * 知识点 :
     *      当遇到多个参数时,可以使用对象封装,但要求对象的属性必须与参数名称一致,同时必须有set和get方法
     *      SpringMVC会自动的将参数赋值给对象的属性
     */
    @RequestMapping("/getUser")
    public User getUser(User user) {
        return user;
    }

    /**
     * RestFul结构,动态接收参数
     * URL : http://localhost:8080/user/restFul/1/张三
     * 返回值 : 返回User对象
     * 难点 : 需要从URL路径中获取参数!!!
     * 语法 :
     *      1.服务器端参数接收时,变量使用{xx}进行包裹,并且位置固定
     *      2.利用@PathVariable注解,动态获取路径中的数据,要求名称必须匹配
     */
    @RequestMapping("/restFul/{id}/{name}")
    public User restFul(@PathVariable Integer id, @PathVariable String name) {
        User user = new User();
        user.setId(id);
        user.setName(name);
        return user;
    }

    /**
     * RestFul对象接收 :
     *      如果对象的属性与{key}相同,则可以使用对象接收\
     * URL : http://localhost:8080/user/restFul2/1/李四/88
     * 用途 : restFul结构一般用于更新操作
     * @param user
     * @return
     */
    //@RequestMapping(value = "/restFul2/{id}/{name}/{age}", method = RequestMethod.GET)
    @GetMapping("/restFul2/{id}/{name}/{age}")          //查询
    //@PostMapping("/restFul2/{id}/{name}/{age}")       //新增
    //@PutMapping("/restFul2/{id}/{name}/{age}")        //修改
    //@DeleteMapping("/restFul2/{id}/{name}/{age}")     //删除
    public User restFul2(User user) {
        return user;
    }

    /**
     * URL : http://localhost:8080/user/saveHobby?hobby=唱,跳,rep,篮球
     * 返回值 : 参数获取之后返回
     * SpringMVC功能 :
     *      如果URL中的参数使用逗号的方式连接,则可以自动转化为数组结构
     */
    @GetMapping("/saveHobby")
    public String[] saveHobby(String[] hobby) {
        //String[] arrays = hobby.split(",");
        //将字符串转化为数组,可以方便后续业务的调用
        //return arrays;
        return hobby;
    }
}
